//
//  HMNetworkTools.swift
//  Swift网络访问工具类
//
//  Created by itheima on 15/12/6.
//  Copyright © 2015年 itheima. All rights reserved.
//

import UIKit
import AFNetworking

enum HMRequestMethod: String {
    case GET = "GET"
    case POST = "POST"
}

class HMNetworkTools: AFHTTPSessionManager {

    static let shareTools: HMNetworkTools = {
        
        let tools = HMNetworkTools()
        // 在 Swift 里面, 会把 NSSet 转成 Set
        tools.responseSerializer.acceptableContentTypes?.insert("text/plain")
        return tools
    }()
    
    /// 发送请求
    ///
    /// - parameter method:    请求方式
    /// - parameter urlString: 请求地址
    /// - parameter params:    请求参数
    /// - parameter callback:  请求成功之后的回调
    func request(method: HMRequestMethod, urlString: String, params: AnyObject?, callback: (response: AnyObject?, error: NSError?)->()){
        
        // 在 Swift 中,是不能向当前类(AFHTTPSessionManager)发送 dataTaskWithHTTPMethod
        // 因为 dataTaskWithHTTPMethod 这个方法是 AFN 写到 .m 文件里面
        // 那么对应在 Swift 里面就相当于是 private 修饰的方法
        
        // 定义请求成功之后的闭包
        let succCallback = { (dataTask: NSURLSessionDataTask, response: AnyObject) -> Void in
            callback(response: response, error: nil)
        }
        
        // 定义请求失败的闭包
        let failureCallBack = { (dataTask: NSURLSessionDataTask?, error: NSError) -> Void in
            callback(response: nil, error: error)
        }
        
        // 根据不同的请求类型,调用不同的请求方法
        if method == .GET {
            self.GET(urlString, parameters: params, success: succCallback, failure: failureCallBack)
        }else{
            self.POST(urlString, parameters: params, success: succCallback, failure: failureCallBack)
        }
    }
}
